﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using BookExpress.DB;
using System.Data.SqlClient;
using System.Web.UI;

namespace BookExpress.Cliente
{
    public class Cliente
    {
        private int cliCod;
        private string cliNome;
        private string cliCPFCNPJ;
        private string cliTipoLogradouro;
        private string cliLogradouro;
        private string cliNumero;
        private string cliComplemento;
        private string cliBairro;
        private string cliCidade;
        private string cliUF;
        private string cliCEP;
        private string cliTelefone;
        private string cliCelular;
        private string cliEmail;

        public int CliCod
        {
            get { return cliCod; }
            set { cliCod = value;}
        }

        public string CliNome
        {
            get { return cliNome; }
            set { cliNome = value; }
        }

        public string CliCPFCNPJ
        {
            get { return cliCPFCNPJ; }
            set
            {
                cliCPFCNPJ = value; //implementar validação CPF/CNPJ
            }
        }

        public string CliTipoLogradouro
        {
            get { return cliTipoLogradouro; }
            set { cliTipoLogradouro = value; }
        }

        public string CliLogradouro
        {
            get { return cliLogradouro; }
            set { cliLogradouro = value; }
        }

        public string CliNumero
        {
            get { return cliNumero; }
            set { cliNumero = value; }
        }

        public string CliComplemento
        {
            get { return cliComplemento; }
            set { cliComplemento = value; }
        }

        public string CliBairro
        {
            get { return cliBairro; }
            set { cliBairro = value; }
        }

        public string CliCidade
        {
            get { return cliCidade; }
            set { cliCidade = value; }
        }

        public string CliUF
        {
            get { return cliUF; }
            set { cliUF = value; }
        }

        public string CliCEP
        {
            get { return cliCEP; }
            set { cliCEP = value; }
        }

        public string CliTelefone
        {
            get { return cliTelefone; }
            set { cliTelefone = value; }
        }

        public string CliCelular
        {
            get { return cliCelular; }
            set { cliCelular = value; }
        }

        public string CliEmail
        {
            get { return cliEmail; }
            set { cliEmail = value; }
        }

        public Cliente consultarCliente(string cpfCnpj)
        {
            ServicosDB sql = new ServicosDB();
            string strConsultar = "SELECT * FROM CLIENTE WHERE cliCPFCNPJ = '" + cpfCnpj + "'";
            SqlDataReader rsCliente;
            
            try
            {
                rsCliente = sql.recordSet(strConsultar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsCliente.HasRows)
            {
                while (rsCliente.Read())
                {
                    Cliente c = new Cliente();
                    c.CliCod = (int)rsCliente["cliCod"];
                    c.CliNome = rsCliente["cliNome"].ToString();
                    c.CliCPFCNPJ = rsCliente["cliCPFCNPJ"].ToString();
                    c.CliTipoLogradouro = rsCliente["cliTipoLogradouro"].ToString();
                    c.CliLogradouro = rsCliente["cliLogradouro"].ToString();
                    c.CliNumero = rsCliente["cliNumero"].ToString();
                    c.CliComplemento = rsCliente["cliComplemento"].ToString();
                    c.CliBairro = rsCliente["cliBairro"].ToString();
                    c.CliCidade = rsCliente["cliCidade"].ToString();
                    c.CliUF = rsCliente["cliUF"].ToString();
                    c.CliCEP = rsCliente["cliCEP"].ToString();
                    c.CliTelefone = rsCliente["cliTelefone"].ToString();
                    c.CliCelular = rsCliente["cliCelular"].ToString();
                    c.CliEmail = rsCliente["cliEmail"].ToString();
                    return c;
                }
            }
            else
            {
                throw new Exception("Cliente não encontrado.");
            }

            return null;
        }

        public void atualizarCliente(int cod, string nome, string cpfCnpj, string tipoLogradouro, string logradouro, string numero, string complemento, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email)
        {
            ServicosDB sql = new ServicosDB();
            string strAtualizar = "UPDATE CLIENTE SET cliNome = '" + nome + "', cliCPFCNPJ = '" + cpfCnpj + "', cliTipoLogradouro = '" + tipoLogradouro
                + "', cliLogradouro = '" + logradouro + "', cliNumero = '" + numero + "', cliComplemento = '" + complemento + "', cliBairro = '" + bairro
                + "', cliCidade = '" + cidade + "', cliUF = '" + uf + "', cliCEP = '" + cep + "', cliTelefone = '" + telefone + "', cliCelular = '" + celular + "', cliEmail = '" + email
                + "' WHERE cliCod = " + cod;
            
            try
            {
                sql.executar(strAtualizar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }
        }

        public void excluirCliente(int cod)
        {
            ServicosDB sql = new ServicosDB();
            string strExcluir = "DELETE FROM CLIENTE WHERE cliCod = " + cod;

            try
            {
                sql.executar(strExcluir);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }
        }

        public void cadastrarCliente(string nome, string cpfCnpj, string tipoLogradouro, string logradouro, string numero, string complemento, string bairro, string cidade, string uf, string cep, string telefone, string celular, string email)
        {
            Cliente c = new Cliente();

            
            if (c.verificarCliente(cpfCnpj) == false)
            {
                ServicosDB sql = new ServicosDB();

                string strCadastrar = "INSERT INTO CLIENTE VALUES ('" + nome + "', '" + cpfCnpj + "', '" + tipoLogradouro
                    + "', '" + logradouro + "', '" + numero + "', '" + complemento + "', '" + bairro
                    + "', '" + cidade + "', '" + uf + "', '" + cep + "', '" + telefone + "', '" + celular + "', '" + email
                    + "')";

                try
                {
                    sql.executar(strCadastrar);
                }
                catch (SqlException)
                {
                    throw new Exception("Falha na conexão com o banco de dados.");
                }
            }
            else
            {
                throw new Exception("Cliente já cadastrado.");
            }
        }

        public bool verificarCliente(string cpfCnpj)
        {
            ServicosDB sql = new ServicosDB();
            string strConsultar = "SELECT * FROM CLIENTE WHERE cliCPFCNPJ = '" + cpfCnpj + "'";
            SqlDataReader rsCliente;
            
            try
            {
                rsCliente = sql.recordSet(strConsultar);
            }
            catch (SqlException)
            {
                throw new Exception("Falha na conexão com o banco de dados.");
            }

            if (rsCliente.HasRows)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}